package com.fll.codeworld.comment;

import com.fll.codeworld.annotation.ParamCheck;
import org.apache.commons.lang3.StringUtils;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;

/**
 * @author fll
 * @description
 * @date 2022/4/25 10:47
 */
public class ParamCheckUtil {
    /**
     * 判断类属性是否为空
     *
     * @param t
     * @throws Exception
     */
    public static <T> String paramCheck(T t){
        if (null == t) {
            return "参数错误,请确认!";
        }
        Class<?> aClass = t.getClass();
        //获取当前对象所有属性,使用的Declared的方法可以访问private属性
        Field[] declaredFields = aClass.getDeclaredFields();

        try {
            for (Field field : declaredFields) {
                //开启访问权限
                field.setAccessible(true);
                //使用此方法 field.get(Object obj) 可以获取  当前对象这个列的值
                Object o = field.get(t);
                Annotation annotation = field.getDeclaredAnnotation(ParamCheck.class);
                //如果没有设置当前注解不用校验
                if (annotation == null) {
                    continue;
                }
                //获取注解接口对象
                ParamCheck check = (ParamCheck) annotation;
                //如果设置了当前注解但是没有值抛出异常
                if (o == null || o == "") {
                    if (StringUtils.isNotBlank(check.message())) {
                        //设置了注解message值直接返回
                        return check.message();
                    } else {
                        return field.getName() + " is null";
                    }
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
}
